/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Movilizacion;

import commonsbeans.ApplicationBean;
import commonsbeans.SessionBean;
import entities.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import persistence.*;
import persistence.exceptions.IllegalOrphanException;
import persistence.exceptions.NonexistentEntityException;
import persistence.exceptions.PreexistingEntityException;
import persistence.exceptions.RollbackFailureException;

/**
 *
 * @author Felipe Duarte
 */
@ManagedBean
@ViewScoped
public class GestionarBarrios implements Serializable {

    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    @ManagedProperty(value = "#{applicationBean}")
    private ApplicationBean applicationBean;
    private BarrioJpaController barrioJpaController = null;
    public List<Barrio> listaBarrios = new ArrayList<Barrio>();
    String globeIcon = "";
    public Barrio barrio = new Barrio();
    public Barrio barrioSelected = new Barrio();
    private boolean editar = false;

    public GestionarBarrios() {
    }

    //Constructor
    @PostConstruct
    public void init() {
        initControllers();
        cargarBarrios();
        globeIcon = "/resources/Globe2.png";
    }

    //<editor-fold defaultstate="collapsed" desc="Funcionalidades">
    private void cargarBarrios() {
        listaBarrios = sessionBean.getUsuarioActual().getCiudadIdCiudad().getBarrioList();
    }


    /**
     * Metodo para crear el barrio en el resumen
     *
     * @see BarrioJpaController
     * @see Barrio
     *
     */
    public void guardarBarrio() {
        if (editar == false) {
            if (barrio.getLatitudBarrio() != null) {
                barrio.setEstado(true);
                listaBarrios.add(barrio);
                barrio.setIdCiudadBarrio(sessionBean.getUsuarioActual().getCiudadIdCiudad());
                barrio.setIdBarrio(barrioJpaController.getIdMax() + 1);
                try {
                    barrioJpaController.create(barrio);
                } catch (PreexistingEntityException ex) {
                    Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
                } catch (RollbackFailureException ex) {
                    Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
                } catch (Exception ex) {
                    Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
                }

                System.out.println("Guardo");
                limpiarFormulario();
                showSuccessMessage("Se ha registrado el barrio con éxito");
            } else {
                showErrorMessage("Debe buscar el barrio en el mapa");
            }
        } else {
            editarBarrio();
            showSuccessMessage("Se ha registrado el barrio con éxito");
            limpiarFormulario();
        }
        
        
    }

    /**
     * Metodo para editar el barrio o deshabilitar
     *
     * @see BarrioJpaController
     * @see Barrio
     *
     */
    private void editarBarrio() {
        try {
            barrioJpaController.edit(barrio);
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RollbackFailureException ex) {
            Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(GestionarBarrios.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Metodo para seleccionar el barrio en el resumen
     *
     */
    public void rowSelected() {
        barrio = barrioSelected;
        editar = true;
    }
    
    public void actualizarBarrio(){
       listaBarrios.clear();
       listaBarrios= barrioJpaController.getBarrio_Habilitados_Ciudad_Todos(sessionBean.getUsuarioActual().getCiudadIdCiudad());
    }

    /**
     * Metodo para deseleccionar el barrio en el resumen
     *
     */
    public void onRow() {
        barrioSelected = new Barrio();
        barrio = new Barrio();
        editar = false;
    }

    /**
     * Metodo para limpiar el formulario
     *
     */
    private void limpiarFormulario() {
        barrio = new Barrio();
    }

    public void showSuccessMessage(String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Operación exitosa", detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    /**
     * Muestra mensajes para notificar error en la transacción
     *
     * @param detail Detalle del error
     */
    public void showErrorMessage(String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
//</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Getter's y setter's">
    public SessionBean getSessionBean() {
        return sessionBean;

    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public ApplicationBean getApplicationBean() {
        return applicationBean;
    }

    public void setApplicationBean(ApplicationBean applicationBean) {
        this.applicationBean = applicationBean;
    }

    public String getGlobeIcon() {
        return globeIcon;
    }

    public void setGlobeIcon(String globeIcon) {
        this.globeIcon = globeIcon;
    }

    public Barrio getBarrioSelected() {
        return barrioSelected;
    }

    public void setBarrioSelected(Barrio barrioSelected) {
        this.barrioSelected = barrioSelected;
    }

    public Barrio getBarrio() {
        return barrio;
    }

    public void setBarrio(Barrio barrio) {
        this.barrio = barrio;
    }

    public List<Barrio> getListaBarrios() {
        return listaBarrios;
    }

    public void setListaBarrios(List<Barrio> listaBarrios) {
        this.listaBarrios = listaBarrios;
    }
//</editor-fold>

    //<editor-fold defaultstate="collapsed" desc="Inicializar controladores">
    public void initControllers() {
        FacesContext context = FacesContext.getCurrentInstance();
        barrioJpaController = (BarrioJpaController) context.getELContext().getELResolver().getValue(context.getELContext(), null, "barrioJpaController");
        


    }
//</editor-fold>
}
